package com.deli.core.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 解析监听器，每解析一行会回调invoke()方法。
 *               整个excel解析结束会执行doAfterAllAnalysed()方法
 * @Author: xudeli
 * @CreateDate: 2019/6/1 11:01
 **/
public class ExcelListener extends AnalysisEventListener {

    //自定义用于暂时存储data。
    //可以通过实例获取该值
    private List<Object> data = new ArrayList<Object>();

    @Override
    public void invoke(Object object, AnalysisContext context) {
        //获得当前页
        System.out.println(context.getCurrentSheet());
        //获取当前行
        System.out.println(context.getCurrentRowNum());
        //数据存储到list，供批量处理，或后续自己业务逻辑处理。
        data.add(object);
        //当数据大于100行时做业务处理
        if(data.size()>=100){
            //自定义用于业务处理可以把数据储存到库中
            doSomething();
            data = new ArrayList<Object>();
        }
    }

    //解析结束
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        doSomething();
        //解析结束销毁不用的资源
        //datas.clear();
    }


    public void doSomething(){
        for (Object o:data) {
            System.out.println(o);
        }
    }
}
